package zhcms.framework.dao;


import java.util.ArrayList;
import java.util.HashMap;

import zhcms.framework.GyReplace;
import zhcms.framework.GySplit;

public class GyForNew {
	private String returnS;
	private String currnS;
	
	public GyForNew()
	{
		returnS="";
		currnS="";
	}
	
	public void setContent(String content){
		this.currnS=content;
	}
	
	/*
	 * 1查找是否有for，如果没有结束返回
		2如果有
		   1进行分割，获得前 中  后三个部分及for的变量名
		   a。前不处理
		   b。中进行判断，如果里面还有for，先对里面的for进行处理，然后拼接返回处理最外面的。
		   c。后不处理，进行前+中+后拼接后重新执行。
	 */
	@SuppressWarnings("unused")
	public void ParseFor1(String gytFrontSeparator,String gytBackSeparator,HashMap<String, ArrayList<HashMap<String, String>>> gytInFor)
	{
		String AS1=this.currnS;
		String AS2="";
		
		//1.查找是否有for，如果没有结束返回
		String[] tempContent = null;
		GySplit h = new GySplit();
		h.tool(AS1, gytFrontSeparator+"for:");
		tempContent = h.Show();
		h = null;
		//System.out.println("currnS字符串:[[[[[[["+AS1);
		if(tempContent.length<2)
		{
			//没有for，直接返回字符串
			//System.out.println("没有for，直接返回字符串:[[[[[[[");
			this.returnS=AS1;
		}
		else
		{
			//如果有
			String SHead="";
			String SMid1="";
			String SMid2="";
			String SFoot="";
			//前
			SHead=tempContent[0];
			
			//中
			String[] tempMidContent = null;
			GySplit a = new GySplit();
			a.tool(tempContent[1], gytBackSeparator);
			tempMidContent = a.Show();
			a = null;
			//得到关键字(for变量名)
			String forKeyWord=tempMidContent[0];
			//
			String[] tempMidContentMain = null;
			GySplit b = new GySplit();
			b.tool(this.currnS, gytFrontSeparator+"endfor:"+forKeyWord+gytBackSeparator);
			tempMidContentMain = b.Show();
			b = null;
			//
			String tempSMid=tempMidContentMain[0];
			//
			String[] tempMidContentString= null;
			GySplit c = new GySplit();
			c.tool(tempSMid, gytFrontSeparator+"for:"+forKeyWord+gytBackSeparator);
			tempMidContentString = c.Show();
			c = null;
			
			SMid1=tempMidContentString[1];
			
			//后
			SFoot=tempMidContentMain[1];
			
			//System.out.println("处理前中的内容:[[[[[[["+SMid1);
			
			//得到前中后对中按照以上规则处理
			String[] tempContentMid = null;
			GySplit d = new GySplit();
			d.tool(SMid1, gytFrontSeparator+"for:");
			tempContent = d.Show();
			d = null;
			if(tempContent.length<2)
			{
				//没有for，直接返回字符串
				//System.out.println("处理1");
				GyGetFor ggf=new GyGetFor();
				ggf.setcurrnS(SMid1);
				ggf.ParseFor(gytFrontSeparator, gytBackSeparator, gytInFor, forKeyWord);
				SMid2=ggf.getsContent();
			}
			else
			{
				//System.out.println("处理2");
				GyFor gyf=new GyFor();
				gyf.setContent(SMid1);
				gyf.ParseFor(gytFrontSeparator, gytBackSeparator, gytInFor);
				SMid2=gyf.getcurrnS();
			}
			
			//System.out.println("处理后中的内容:[[[[[[["+SMid2);
			
			GyReplace r = new GyReplace();
			//System.out.println("处理后3333的currnS内容:[[[[[[["+AS1);
			
			AS2= r.replace(AS1,gytFrontSeparator + "for:"+forKeyWord + gytBackSeparator +SMid1 + gytFrontSeparator + "endfor:"+forKeyWord + gytBackSeparator, SMid2);
			
			//String allS=SHead+SMid2+SFoot;
			
			
			//GyFor gyf=new GyFor();
			//gyf.setContent(this.currnS);
			//gyf.ParseFor(gytFrontSeparator, gytBackSeparator, gytInFor);
			//this.returnS=gyf.getcurrnS();
			
			//System.out.println("处理后中的currnS内容:[[[[[[["+AS2);
			this.returnS=AS2;
		}
		
	}
	
	public void ParseFor(String gytFrontSeparator,String gytBackSeparator,HashMap<String, ArrayList<HashMap<String, String>>> gytInFor)
	{
	
		int NumFor=0;
		
		String[] tempContent = null;
		
		GyLinkTables head = null;
		GyLinkTables CL = new GyLinkTables();
		
		GySplit a = new GySplit();
		a.tool(this.currnS, gytFrontSeparator+"for:");
		tempContent = a.Show();
		a = null;
		
		NumFor=tempContent.length-1;
		for(int i=0;i<NumFor;i++)
		{
			String tempcuurS="";
			String keyword="";
			String Content="";
			//
			for(int j=i;j<NumFor;j++)
			{
				tempcuurS=tempcuurS+tempContent[j]+gytFrontSeparator+"for:";
			}
			
			String[] tempContentB = null;
			GySplit b = new GySplit();
			b.tool(tempcuurS, gytBackSeparator);
			tempContentB = b.Show();
			b = null;
			keyword=tempContentB[0];
			
			String[] tempContentC = null;
			GySplit c = new GySplit();
			c.tool(tempcuurS, gytFrontSeparator+"endfor:"+keyword+gytBackSeparator);
			tempContentC = c.Show();
			c = null;
			
			Content=tempContentC[0];
			GyForData nodeData = new GyForData();
			
			nodeData.id=i;
			nodeData.keyword=keyword;
			nodeData.content=Content;
			nodeData.depth=0;
			head = CL.CLAddEnd(head, nodeData);//在链表尾部添加结点
		}
		
		CL.CLAllNode(head);	
	}
	
	public String getcurrnS()
	{
		return this.currnS;
	}
	
	public String getreturnS()
	{
		return this.returnS;
	}
	
}
